#-*- coding: utf-8 -*-
#-------------------------------------------------------------------------------
# Number：     017
# Name:        in function内置函数
# Author:      SUMMVING
# Email:       summving@gmail.com
# Created:     2013/08/18  21:44
# Copyright:   (c) SUMMVING 2013
# Licence:     GPLv3
#-------------------------------------------------------------------------------

print abs(-10)                     #内置函数abs()，求绝对值

l = [1,23,563,45,6785,23]          #只能用下划线

print max(l)                       #内置函数max()，求最大值

print len(l)                       #内置函数len()，求函数长度

print divmod(5,2)                  #整除取余，输出：(2,1)，商为2余为1

print divmod(2,5)                  #输出：(0,2),注意参数的位置

help(divmod)                       #查看内置函数divmod用法

print pow(2,3)                     # pow()指数表达函数，此处只有2个参数，表示2的3次方
print pow(4,4,3)                   #当pow(x,y[,z])时，表示x的y次方再除以z取余；输出为1

print round(28)                    #把数值返回浮点型；输出28.0

print callable(min)                #查询是否存在可调用函数min，存在min函数；输出：True

print type(l)                      #查询函数l的数据类型,也可用print isinstance(l,list)；若是输出True

print cmp("h","hello")             #用于比较两整形函数，若一样返回0，若前者比后者大，返回1，否者返回-1，此时输出-1
                                   #字符串相比较时是从首字符逐位比较判断的，也就是说, 当比完第一位相同时, 就看第二位的大小
print cmp("he","hcoo")             #此时输出 1

print xrange(6)                    #用法与range完全相同，所不同的是生成的不是一个数组，而是一个生成器;输出:xrange(6)
a = xrange(6)                      #range(6)会直接生成一个list对象,有6个数，xrange只在需要用的时候调用，在大数据时xrange性能更好
print a[4]                         #输出4
print '-----'

"""string函数"""
#-----replace替换函数-------
s = "hello world"
print s.capitalize()                     #captialize()使字符串首字母大写，输出：Hello world
print s.replace("hello","nice")          #将字符串hello替换为nice；查询方法：help(str.replace)
print s.replace("l","k")                 #输出:hekko workd
print s.replace("l","k",1)               #把第1位的l替换为k；输出：heklo world
print s.replace("l","k",2)               #把前两位l替换为k：输出：hekko world
print s.replace("l","k",3)               #输出：hekko workd


#-----split分割函数------
ip = "192.168.1.123"                     #设置字符串ip
print ip.split(".")                      #字符串分割，以 . 为分割标志，单双引号无分别；输出：['192', '168', '1', '123']，为一个列表
print ip.split(".",1)                    #分割第一位，输出：['192', '168.1.123']
print ip.split(".",2)                    #输出：['192', '168', '1.123']
print ip.split(".",3)                    #输出：['192', '168', '1', '123']

import string                            #引用内置string模块
print string.replace(s,'hello','good')   #把字符串s里面的hello替换为good
print '----'


"""序列处理函数"""
#------filter过滤函数------
def f(x):                                #判断函数
    if x > 50:
       return True
def f1(x):                               #判断偶数
    if x%2 == 0:
       return True
print f(10)                              #此时输出为：True
print f(3)                               #此时输出为:None
l = range(100)                           #设置一个列表l
print filter(f,l)                        #使用内置filter（过滤）函数，f为过滤条件，l为过滤目标，输出：[6, 7, 8, 9]
print filter(f1,l)                       #保留返回值为True的数字，输出：[0, 2, 4, 6, 8]
print "l :",l                            #实际上l的值并没有改变
print filter(lambda x:x%2 == 0,l)        #输出列表l里的偶数，冒号后的条件语句无需if
print '-----'


#------zip,map合并函数-------
name = ['sam','jack','jose']
age = [18,19,20]
tel = ['133','134','135']
height = [165,170]                       #注意这没有第3个值
print zip(name ,age ,tel)                #输出：[('sam', 18, '133'), ('jack', 19, '134'), ('jose', 20, '135')]
print map(None,name,age,tel)             #注意None的第一个字母必须大写，此时输出与zip一样

print zip(name,age,tel,height)           #此时将选择最短的序列进行合并，输出：[('sam', 18, '133', 165), ('jack', 19, '134', 170)]
print map(None,name,age,tel,height)      #若不存在的值，将用None代替，
                                         #输出：[('sam', 18, '133', 165), ('jack', 19, '134', 170), ('jose', 20, '135', None)]
a = [1,3,5]
b = [2,4,6]
def f2(x,y):
    return x*y
print map(None,a,b)                      #输出：[(1, 2), (3, 4), (5, 6)]
print map(f2,a,b)                        #None可用函数替换，输出：[2, 12, 30]


"""reduce函数"""
l1 = range(1,101)
print "reduce :",reduce (lambda x,y:x+y,l1)       #序列求和函数





